package keter.ssh.cli;

import java.util.List;

import org.apache.commons.cli.CommandLine;
import org.apache.commons.cli.CommandLineParser;
import org.apache.commons.cli.DefaultParser;
import org.apache.commons.cli.ParseException;
import org.apache.commons.lang3.StringUtils;
import org.apache.commons.lang3.Validate;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

import keter.ssh.core.SshUtil;
import keter.ssh.exec.CmdExecutor;

public class Parser {
	/**
	* Logger for this class
	*/
	private static final Logger logger = LoggerFactory.getLogger(Parser.class);
	
	static CommandOptions cmder = new CommandOptions();
	static CommandLineParser parser = new DefaultParser(); 	
	
	/**
	 * 参数解析+执行命令
	 * @param args
	 * @param cmd
	 * @throws InterruptedException 
	 * @author gulixing@msn.com
	 * @throws ParseException 
	 * @date   2016年7月27日
	 */
	public static void praseAndExec(List<SshUtil> sshList,String args[]){
		Validate.notNull(sshList);
		Validate.notNull(args);
		translateArgs(args);
		//直接执行命令
		if(args[0].contains("exec")) { 
			logger.info("执行命令:{}",StringUtils.substringAfter(args[0], "exec"));
			CmdExecutor.execute(sshList,StringUtils.substringAfter(args[0], "exec"));
			return;
		}
		CommandLine cmd = null;
		try {
			cmd = parser.parse(cmder.getOptions(), args);
		} catch (ParseException e) {
			logger.error("命令解析异常！",e);
		} 
		if(cmd.hasOption("h")) { 
			   // 这里显示简短的帮助信息
			   System.out.println("使用说明： \n");
			   System.out.println("1、 ssh-bach ");
			   System.out.println("2、 ssh-bach -g|-p [源文件] [目标文件] ");
			   System.out.println(" -g,get  src <dest>     文件下载, 远程文件URI 本地目录");
			   System.out.println(" -p,put  src <dest>     文件上传, 本地文件URI 远程目录");
			   System.exit(0);
		}
		
		else if(cmd.hasOption("g")) { 
			String[] params = cmd.getOptionValues("g"); 
			String src = params[0];
			if(params.length==1){//省略目标参数
				CmdExecutor.download(sshList,src);
			}
			else{
				CmdExecutor.download(sshList,src, params[1]);
			}
		}
		
		else if(cmd.hasOption("p")) { 
			String[] params = cmd.getOptionValues("p"); 
			String src = params[0];
			if(params.length==1){//省略目标参数
				CmdExecutor.upload(sshList,src);
			}
			else{
				CmdExecutor.upload(sshList,src, params[1]);
			}
		}
		else {
			System.out.println("不支持的命令!");
		}
	}
	
	private static void translateArgs(String args[]){
		//get、put命令转换
		if(args[0].equals("get")){args[0] = "-g";}
		else if(args[0].equals("put")){args[0] = "-p";}
		//退出命令转换
		else if(args[0].equals("exit") || args[0].equals("quit")){
			System.exit(1);
		}
		else {
			args[0] = "exec "+args[0]+"";
		}
	}

}
